学习记录之Java设计模式(二)

抽象工厂模式

抽象工厂模式,围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。

适用场景

1、客户端(应用层)不依赖于产品实例创建、实现等细节

2、强调一系列相关的产品(属于同一产品族)

3、提供一个产品类的库

优缺点:

优点:

具体产品在应用层的代码隔离,无需关心创建细节

将一个系列产品统一到一起创建

缺点:

产品簇中扩展新的产品困难

增加系统的抽象性和理解难度

代码示例

定义接口

package Factory.abstractfactory;

public interface IphoneProduct {
void start();
void shutdown();
void call();
}

=================================================

package Factory.abstractfactory;

public interface RootProduct {
void send();
void accept();
void setting();

}

创建对象

package Factory.abstractfactory;

public class XiaoMi implements IphoneProduct{

@Override
public void start() {
	// TODO Auto-generated method stub
	System.out.println("小米开机");
}

@Override
public void shutdown() {
	// TODO Auto-generated method stub
	System.out.println("小米关机");
}

@Override
public void call() {
	// TODO Auto-generated method stub
	System.out.println("小米打电话");
	
}

}

====================================================

package Factory.abstractfactory;

public class HuaWei implements IphoneProduct{

@Override
public void start() {
	// TODO Auto-generated method stub
	System.out.println("华为开机");
}

@Override
public void shutdown() {
	// TODO Auto-generated method stub
	System.out.println("华为关机");
}

@Override
public void call() {
	// TODO Auto-generated method stub
	System.out.println("华为打电话");
}

}

==================================================

package Factory.abstractfactory;

public class HuaWeiRoot implements RootProduct{

@Override
public void send() {
	// TODO Auto-generated method stub
	System.out.println("华为路由发送");
}

@Override
public void accept() {
	// TODO Auto-generated method stub
	System.out.println("华为路由接收");
}

@Override
public void setting() {
	// TODO Auto-generated method stub
	System.out.println("华为路由设置");
}

}

======================================================

package Factory.abstractfactory;

public class XiaoMiRoot implements RootProduct{

@Override
public void send() {
	// TODO Auto-generated method stub
	System.out.println("小米路由发送");
}

@Override
public void accept() {
	// TODO Auto-generated method stub
	System.out.println("小米路由接收");
}

@Override
public void setting() {
	// TODO Auto-generated method stub
	System.out.println("小米路由设置");
}

}

创建生产产品的工厂

package Factory.abstractfactory;

public class xiaomifactory implements ProductFactory{

@Override
public IphoneProduct iphoneProduct() {
	// TODO Auto-generated method stub
	return new XiaoMi();
}

@Override
public RootProduct rootProduct() {
	// TODO Auto-generated method stub
	return new XiaoMiRoot();
}

}

=====================================================

package Factory.abstractfactory;

public class huaweifactory implements ProductFactory{

@Override
public IphoneProduct iphoneProduct() {
	// TODO Auto-generated method stub
	return new HuaWei();
}

@Override
public RootProduct rootProduct() {
	// TODO Auto-generated method stub
	return new HuaWeiRoot();
}

}

测试结果

package Factory.abstractfactory;

public class Client {

/**
 * @param args
 */
public static void main(String[] args) {
	// TODO Auto-generated method stub
      xiaomifactory xf = new xiaomifactory();
      IphoneProduct product=xf.iphoneProduct();
      product.call();
      product.start();
      product.shutdown();
      huaweifactory hf=new huaweifactory();
      RootProduct rproduct=hf.rootProduct();
      rproduct.accept();
      rproduct.send();
      rproduct.setting();
}

}

/*

测试结果

小米打电话
小米开机
小米关机
华为路由接收
华为路由发送
华为路由设置

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值