zoukankan      html  css  js  c++  java
  • 设计模式之禅抽象工厂

    抽象工厂模式:为创建一组相关或互相以来的对象提供一个接口,而且无需制定它们的具体类。

    抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂产生需要的对象是非常好的解决方式。即工厂方法只满足单一条件商品的创建,而若对商品进行另一条件分类时,就显得乏力了。抽象工厂是将工厂细分,通过接口回调子工厂的方式实现高内聚的。

    package demo;
    /**
     * 抽象产品类
     * @author zhf
     *
     */
    public abstract class AbstractProductA {
        //每个产品共有的方法
        public void shareMethod(){
            
        }
        //每个产品相同方法,不同实现
        public abstract void doSomething();
        
    }
    
    package demo;
    /**
     * 抽象产品类
     * @author zhf
     *
     */
    public abstract class AbstractProductB {
        //每个产品共有的方法
        public void shareMethod(){
            
        }
        //每个产品相同方法,不同实现
        public abstract void doSomething();
        
    }
    
    
    package demo;
    
    public class ProductA1 extends AbstractProductA {
        @Override
        public void doSomething() {
            //产品一的实现方法
            
        }
    
    }
    
    package demo;
    
    public class ProductA2 extends AbstractProductA {
        @Override
        public void doSomething() {
            //产品二的实现方法
            
        }
    
    }
    
    package demo;
    
    public class ProductB1 extends AbstractProductB {
        @Override
        public void doSomething() {
            //产品一的实现方法
            
        }
    
    }
    
    package demo;
    
    public class ProductB2 extends AbstractProductB {
        @Override
        public void doSomething() {
            //产品二的实现方法
            
        }
    
    }
    
    
    package demo;
    
    public abstract class AbstractCreator {
        public abstract AbstractProductA createProductA();
        public abstract AbstractProductB createProductB();
    
    }
    
    
    package demo;
    /**
     * 产品等级1的实现类
     * @author zhf
     *
     */
    public class Creator1 extends AbstractCreator{
        @Override
        public AbstractProductA createProductA() {
            return new ProductA1();
        }
        @Override
        public AbstractProductB createProductB() {
            // TODO Auto-generated method stub
            return new ProductB1();
        }
    }
    
    package demo;
    /**
     * 产品等级2
     * @author zhf
     *
     */
    public class Creator2 extends AbstractCreator{
        @Override
        public AbstractProductA createProductA() {
            // TODO Auto-generated method stub
            return new ProductA2();
        }
        @Override
        public AbstractProductB createProductB() {
            // TODO Auto-generated method stub
            return new ProductB2();
        }
    }
    
    package demo;
    
    public class Client {
        public static void main(String[] args) {
            AbstractCreator creator1 = new Creator1();
            AbstractCreator creator2 = new Creator2();
            
            AbstractProductA a1 = creator1.createProductA();
            AbstractProductA a2 = creator2.createProductA();
            AbstractProductB b1= creator1.createProductB();
            AbstractProductB b2= creator2.createProductB();
        }
    
    }
  • 相关阅读:
    让WPF和SL控件同时支持绑定和赋值
    VS2010下如何调试Framework源代码(即FCL)
    使用Entity Framework和WCF Ria Services开发SilverLight之2:POCO
    WPF快速指导15:动画
    改善C#程序的建议5:引用类型赋值为null与加速垃圾回收
    使用Entity Framework和WCF Ria Services开发SilverLight之1:简单模型
    MVVM中的命令绑定及命令参数
    改善C#程序的建议7:正确停止线程
    Prism安装、MVVM基础概念及一个简单的样例
    改善C#程序的建议8:避免锁定不恰当的同步对象
  • 原文地址:https://www.cnblogs.com/cxyzl/p/2545461.html
Copyright © 2011-2022 走看看