您的位置:首页 > 其它

工厂模式(三)--抽象工厂模式

2016-05-19 19:41 459 查看
抽象工厂模式:当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

抽象工厂模式与工厂方法模式的区别:

工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。

类图:



场景:现在有2个产品,手机(Phone)和平板(Pad),我们需要一个工厂(IFactory)生产2中产品,现在有2个品牌小米,苹果都做这产品,并且有着自己的工厂。

代码:

产品的基类与实现的接口

public interface ICall {
void call();
}

public abstract class Phone implements ICall {
}

public interface IPlay {
void play();
}

public abstract class Pad implements IPlay {
}


抽象工厂:

public interface IFactory {
Phone createPhone();
Pad createPad();
}


小米产品:

public class XiaoMiPhone extends Phone {
@Override
public void call() {
Log.e("zhang", "用小米手机打电话" );
}
}
public class XiaoMiPad extends Pad {
@Override
public void play() {
Log.e("zhang", "用小米平板玩游戏" );
}
}


小米的工厂:

public class XiaoMiFactory implements IFactory {
@Override
public Phone createPhone() {
return new XiaoMiPhone();
}

@Override
public Pad createPad() {
return new XiaoMiPad();
}
}


苹果的产品

public class IPhone extends Phone {
@Override
public void call() {
Log.e("zhang", "用iPhone打电话" );
}
}

public class IPad extends Pad {
@Override
public void play() {
Log.e("zhang", "用iPad玩游戏" );
}
}


苹果的工厂:

public class AppleFactory implements IFactory {
@Override
public Phone createPhone() {
return new IPhone();
}

@Override
public Pad createPad() {
return new IPad();
}
}


程序入口:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

IFactory factory = new XiaoMiFactory();
operate(factory);

factory = new AppleFactory();
operate(factory);
}

public void operate(IFactory factory) {
Phone phone = factory.createPhone();
phone.call();
Pad pad = factory.createPad();
pad.play();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: