【代码体现】:成员变量
【箭头及指向】:带实心菱形的实线,菱形指向整体
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
//抽象产品角色 public interface Car{ public void drive(); } //具体产品角色 public class Benz implements Car{ public void drive() { System.out.println("Driving Benz "); } } public class Bmw implements Car{ public void drive() { System.out.println("Driving Bmw "); } } //工厂类角色 public class Driver{ //工厂方法.注意 返回类型为抽象产品角色 public static Car driverCar(String s)throws Exception{ //判断逻辑,返回具体的产品角色给Client if(s.equalsIgnoreCase("Benz")) return new Benz(); else if(s.equalsIgnoreCase("Bmw")) return new Bmw(); else throw new Exception(); } } abstract class Strategy{//算法方法public void AlgorithmInterface();}
public class ConcreteStrategyA extend Strategy{//算法A实现方法public void AlgorithmInterface(){//算法A实现方法}}public class ConcreteStrategyB extend Strategy{//算法B实现方法public void AlgorithmInterface(){//算法B实现方法}}public class Context{Strategy strategy;public Context(Strategy strategy){ //初始化时,传入具体的策略对象this.strategy = strategy;}//上下文接口public void ContextInterface(){ //根据具体的策略对象调用其算法方法 strategy.AlgorithmInterface();}} //主函数代码:public static void main(String[] args) {Context context;//由于实例化不同的策略,在调用context.AlgorithmInterface();时,所获得的结果也不同。 context = new Context(new ConcreteStrategyA()); context.AlgorithmInterface(); context = new Context(new ConcreteStrategyB()); context.AlgorithmInterface();}public class Context{Strategy strategy = null; //声明一个接口对象public Context(String type){ //初始化时,在Context类中实现简单工厂的应用。switch(type){case "需求一":Strategy s1 = new ConcreteStrategyA(); strategy = s1;break;case "需求二":Strategy s2 = new ConcreteStrategyB(); strategy = s2;break;}}public double GetResult(){return strategy..AlgorithmInterface();}}
//工厂模式用法Strategy s = StrategyFactory.createStrategy(type);... = s.GetResult();//策略与工厂结合Context c = Context(type);... = c.GetResult();