工厂方法

框架:能完成一定功能的半成品,通常完成的功能是基础的,有难度的,通用的。

面向对象是开发人员,而不是最终用户。


工厂方法:

主要功能是在父类不知道具体实现的情况下完成功能调用(该父类一定是抽象类,完成调用的方法一定是抽象方法),而具体的实现延迟到子类来实现。


工厂方法本意是由Creator中其他方法使用工厂方法创建的对象,一般情况下工厂方法不被Creator外部使用。


(感觉设计模式就是将原来简单直接的使用方式,多加了几层绕了几个弯,搞得更复杂了而已,目前还没体会到有什么好处)


client使用Creator一般有2种情况:使用Creator对象,使用Creator创建的对象


IoC Inversion of Control 控制反转

DI  Dependency Injection 依赖注入

程序(也可以是一个对象)、外部资源、IoC/DI 容器

从程序的角度出发,它需要依赖容器给其注入外部资源。

从容器的角度出发,它控制资源的创建,然后将其反注入到应用程序中。

IoC/DI是种思想,将应用程序和所需的资源分离,提高了灵活性。


工厂方法的本质是延迟到子类来选择实现。

简单工厂是的“选择实现”在工厂类中直接完成,工厂方法的“选择实现”是在其子类中完成。

如果工厂方法类中只提供工厂方法,并且工厂方法有默认实现,那就是简单工厂了。


依赖倒置原则

低层依赖高层,不论低层还是高层,都依赖抽象。


应用场景:1)当需要创建某个接口的对象,而又不知道具体实现时 2)如果一个类本身就需要由它的子类来创建所需的对象时。


示例代码

public class Factory_Method {
	public static void main(String[] args) {
		Creator c1 = new ImplCreator1();
		Creator c2 = new ImplCreator2();
		c1.work("test data");
		c2.work("test data");
	}
}

interface Product {
	void work(String s);
}

class ImplProduct1 implements Product{

	@Override
	public void work(String s) {
		// TODO Auto-generated method stub
		System.out.println(s+" finish in ImplProduct1");
	}
	
}
class ImplProduct2 implements Product{
	
	@Override
	public void work(String s) {
		// TODO Auto-generated method stub
		System.out.println(s+" finish in ImplProduct2");
	}
	
}

abstract class Creator{
	abstract Product factoryMethod();
	
	void work(String s){
		Product p = factoryMethod();
		p.work(s);
	}
}

class ImplCreator1 extends Creator{

	@Override
	Product factoryMethod() {
		// TODO Auto-generated method stub
		return new ImplProduct1();
	}
	
}

class ImplCreator2 extends Creator{
	
	@Override
	Product factoryMethod() {
		// TODO Auto-generated method stub
		return new ImplProduct2();
	}
	
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值