【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
泛化=实现>组合>聚合>关联>依赖
//抽象产品角色 publicinterfaceCar{ publicvoiddrive(); } //具体产品角色 publicclassBenzimplementsCar{ publicvoiddrive(){ System.out.println("Driving Benz "); } } publicclassBmwimplementsCar{ publicvoiddrive(){ System.out.println("Driving Bmw "); } } //工厂类角色 publicclassDriver{ //工厂方法.注意 返回类型为抽象产品角色 publicstaticCardriverCar(Strings)throwsException{ //判断逻辑,返回具体的产品角色给Client if(s.equalsIgnoreCase("Benz")) returnnewBenz(); elseif(s.equalsIgnoreCase("Bmw")) returnnewBmw(); elsethrownewException(); } } abstractclassStrategy{//算法方法publicvoidAlgorithmInterface();}
publicclassConcreteStrategyAextendStrategy{//算法A实现方法publicvoidAlgorithmInterface(){//算法A实现方法}}publicclassConcreteStrategyBextendStrategy{//算法B实现方法publicvoidAlgorithmInterface(){//算法B实现方法}}publicclassContext{Strategystrategy;publicContext(Strategystrategy){ //初始化时,传入具体的策略对象this.strategy=strategy;}//上下文接口publicvoidContextInterface(){ //根据具体的策略对象调用其算法方法 strategy.AlgorithmInterface();}}//主函数代码:publicstaticvoidmain(String[]args){Contextcontext;//由于实例化不同的策略,在调用context.AlgorithmInterface();时,所获得的结果也不同。 context =newContext(newConcreteStrategyA()); context.AlgorithmInterface(); context =newContext(newConcreteStrategyB()); context.AlgorithmInterface();}publicclassContext{Strategystrategy=null; //声明一个接口对象publicContext(Stringtype){ //初始化时,在Context类中实现简单工厂的应用。switch(type){case"需求一":Strategys1=newConcreteStrategyA(); strategy =s1;break;case"需求二":Strategys2=newConcreteStrategyB(); strategy =s2;break;}}publicdoubleGetResult(){returnstrategy..AlgorithmInterface();}}
//工厂模式用法Strategys=StrategyFactory.createStrategy(type);...=s.GetResult();//策略与工厂结合Contextc=Context(type);...=c.GetResult();