抽象工厂模式

来源:互联网 发布:算日子的软件 编辑:程序博客网 时间:2024/05/28 06:08

定义
起源与以前对不同操作系统的图形化解决方案,如不同操作系统的按钮和文本框控件其实现不同,展示效果也不一样,对于每一个操作系统,其本身就构成一个产品类,而按钮与文本框控件也构成一个类,两种产品类两种变化,各自有自己的特性。
魏传建一组相关或者是互相依赖的对象提供统一接口,而不需要指定它们的具体类。
使用场景
Android、iOS、Windows Phone下都有短信软件和拨号软件,两者都属于Software范畴,但是,他们所在的操作系统平台不一样,即便是同一家公司出品的软件,其代码的实现逻辑也是不同的。
UML图:
这里写图片描述
代码
CarFactory.java

public abstract class CarFactory {    public abstract ITire createTire();    public abstract IEngine createEngine();    public abstract IBrake createBrake();}

ITire.java

public interface ITire {    void tire();}

NormalTire

public class NormalTire implements ITire {    @Override    public void tire(){        System.out.println("普通轮胎");    }}

IEngine.java

public interface IEngine {    void engine();}

ImportEngine.java

public class ImportEngine implements IEngine {    @Override    public void engine(){        System.out.println("进口发动机");    }}

DomesticEngine.java

public class DomesticEngine implements IEngine {    @Override    public void engine(){        System.out.println("国产发动机");    }}

IBrake.java

public interface IBrake {    void brake();}

SeniorBrake.java

public class SeniorBrake implements IBrake {    @Override    public void brake(){        System.out.println("高级制动");    }}

Q3Factory.java

public class Q3Factory extends CarFactory {    @Override    public ITire createTire(){        return new NormalTire();    }    @Override    public IEngine createEngine(){        return new DomesticEngine();    }    @Override    public IBrake createBrake(){        return new NormalBrake();    }}

Q7Factory.java

public class Q7Factory extends CarFactory{    @Override    public ITire createTire(){        return new SUVTire();    }    @Override    public IEngine createEngine(){        return new ImportEngine();    }    @Override    public IBrake createBrake(){        return new SeniorBrake();    }}

SUVTire.java

public class SUVTire implements ITire {    @Override    public void tire(){        System.out.println("越野轮胎");    }}

Client.java

public class Client {    public static void main(String[] args){        CarFactory factoryQ3=new Q3Factory();        factoryQ3.createTire().tire();        factoryQ3.createEngine().engine();        factoryQ3.createBrake().brake();        System.out.println("-----------------------");        CarFactory factoryQ7=new Q7Factory();        factoryQ7.createTire().tire();        factoryQ7.createEngine().engine();        factoryQ7.createBrake().brake();    }}

运行结果:
这里写图片描述

0 0
原创粉丝点击