首页 > 代码库 > 大话设计模式_工厂方法(Java代码)
大话设计模式_工厂方法(Java代码)
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
简单描述:1个产品抽象类(或者接口),多个具体产品,1个工厂抽象类(拥有生成抽象产品的方法),多个具体工厂,其中每个具体工厂可生成各个不同的产品。
大话设计模式中的截图:
例子代码:
Product抽象类:
1 package com.longsheng.factorymethod; 2 3 public abstract class Product { 4 5 public abstract void Method1(); 6 7 public abstract void Method2(); 8 9 public abstract void Method3(); 10 11 }
ConcreteProductA具体Product类:
1 package com.longsheng.factorymethod; 2 3 public class ConcreteProductA extends Product { 4 5 @Override 6 public void Method1() { 7 System.out.println("ConcreteProductA--Method1"); 8 } 9 10 @Override 11 public void Method2() { 12 System.out.println("ConcreteProductA--Method2"); 13 } 14 15 @Override 16 public void Method3() { 17 System.out.println("ConcreteProductA--Method3"); 18 } 19 20 }
ConcreteProductB具体Product类:
1 package com.longsheng.factorymethod; 2 3 public class ConcreteProductB extends Product { 4 5 @Override 6 public void Method1() { 7 System.out.println("ConcreteProductB--Method1"); 8 } 9 10 @Override 11 public void Method2() { 12 System.out.println("ConcreteProductB--Method2"); 13 } 14 15 @Override 16 public void Method3() { 17 System.out.println("ConcreteProductB--Method3"); 18 } 19 20 }
ConcreteProductC具体Product类:
1 package com.longsheng.factorymethod; 2 3 public class ConcreteProductC extends Product { 4 5 @Override 6 public void Method1() { 7 System.out.println("ConcreteProductC--Method1"); 8 } 9 10 @Override 11 public void Method2() { 12 System.out.println("ConcreteProductC--Method2"); 13 } 14 15 @Override 16 public void Method3() { 17 System.out.println("ConcreteProductC--Method3"); 18 } 19 20 }
Factory抽象类:
1 package com.longsheng.factorymethod; 2 3 public abstract class Factory { 4 5 public abstract Product createProduct(); 6 7 }
生产ConcreteProductA实例的ConcreteFactoryA:
1 package com.longsheng.factorymethod; 2 3 public class ConcreteFactoryA extends Factory { 4 5 @Override 6 public Product createProduct() { 7 return new ConcreteProductA(); 8 } 9 10 }
生产ConcreteProductB实例的ConcreteFactoryB:
1 package com.longsheng.factorymethod; 2 3 public class ConcreteFactoryB extends Factory { 4 5 @Override 6 public Product createProduct() { 7 return new ConcreteProductB(); 8 } 9 10 }
生产ConcreteProductC实例的ConcreteFactoryC:
1 package com.longsheng.factorymethod; 2 3 public class ConcreteFactoryC extends Factory { 4 5 @Override 6 public Product createProduct() { 7 return new ConcreteProductC(); 8 } 9 10 }
客户端代码:
1 package com.longsheng.factorymethod; 2 3 public class Client { 4 5 public static void main(String[] args) { 6 Factory mFactory = new ConcreteFactoryA(); 7 Product Product1 = mFactory.createProduct(); 8 Product Product2 = mFactory.createProduct(); 9 Product Product3 = mFactory.createProduct(); 10 Product1.Method1(); 11 Product2.Method1(); 12 Product3.Method1(); 13 } 14 15 }
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现产品类,选择判断的问题还是存在的,也就是说工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。要想增加功能,本来是修改工厂类,现在变成修改客户端。但是当添加新的Product时,并不需要修改工厂,只需要添加Product和生产Product的工厂,克服了简单工厂违背的开放封闭原则。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。