Java设计模式

一、简单工厂模式

简单工厂模式又称静态工厂模式,在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定哪一个产品类应当被实例化。

简单工厂模式的组成:

工厂类角色:本模式的核心,含有一定的商业逻辑和判断逻辑,在Java中由一个具体类实现。

抽象产品角色:它一般是聚义产品继承的父类或者实现的接口,在Java中由接口或抽象类来实现。

具体产品角色:工厂类所创建的对象就是此角色的实例,在Java中由一个具体类实现。

模式示例:

/**
 * 
 *接口的定义,该接口可通过简单工厂来创建
 */
public interface Api
{
	public void operation(String s);
}
/**
 * 
 *接口具体实现类A
 */
public class ImplA implements Api
{
	public void operation(String s)
	{
		System.out.println("ImplA s==" + s);
	}
}
/**
 * 
 *接口具体实现类B<pre name="code" class="sql">/**
 * 
 *工厂类,用于创建Api对象
 */
public class Factory
{
	/**
	 * 具体创建Api对象的方法
	 */
	public static Api createApi(int condition)
	{
		Api api = null;
		if(condition == 1)
			api = new ImplA();
		else if(condition == 2)
			api = new ImplB();
		return api;
	}
}

*/public class ImplB implements Api{public void operation(String s){System.out.println("ImplB s==" + s);}}

 
 
/**
 * 
 *客户端,使用Api接口
 */
public class Client
{
	public static void main(String[] args)
	{
		//通过简单工厂来获取接口对象
		Api api = Factory.createApi(1);
		api.operation("简单工厂模式示例");
	}
}

二、工厂方法模式

工厂方法模式是简单工厂模式的进一步的抽象化和推广,工厂方法模式里不再由一个工厂类决定哪一个产品应当被实例化,这个决定被交给抽象工厂的子类去做。

工厂方法模式组成:

抽象工厂角色:工厂方法模式的核心,与应用程序无关。是具体工厂角色必须实现的接口或必须继承的父类,Java中由抽象类或接口来实现。

具体工厂角色:含有和业务逻辑相关的代码,负责创建对应的具体产品的对象。

抽象产品角色:是具体产品继承的父类或者是实现的接口,Java中由抽象类或接口实现。

具体产品角色:具体工厂角色创建的对象就是该角色的实例,Java中由具体类实现。

示例:

//抽象产品角色
public interface Moveable {
    void run();
}
//具体产品角色
public class Plane implements Moveable {
    @Override
    public void run() {
        System.out.println("plane....");
    }
}

public class Broom implements Moveable {
    @Override
    public void run() {
        System.out.println("broom.....");
    }
}

//抽象工厂
public abstract class VehicleFactory {
    abstract Moveable create();
}
//具体工厂
public class PlaneFactory extends VehicleFactory{
    public Moveable create() {
        return new Plane();
    }
}
public class BroomFactory extends VehicleFactory{
    public Moveable create() {
        return new Broom();
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        VehicleFactory factory = new BroomFactory();
        Moveable m = factory.create();
        m.run();
    }
}

三、抽象工厂模式

示例:

//抽象工厂类
public abstract class AbstractFactory {
    public abstract Vehicle createVehicle();
    public abstract Weapon createWeapon();
    public abstract Food createFood();
}
//具体工厂类,其中Food,Vehicle,Weapon是抽象类,
public class DefaultFactory extends AbstractFactory{
    @Override
    public Food createFood() {
        return new Apple();
    }
    @Override
    public Vehicle createVehicle() {
        return new Car();
    }
    @Override
    public Weapon createWeapon() {
        return new AK47();
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        AbstractFactory f = new DefaultFactory();
        Vehicle v = f.createVehicle();
        v.run();
        Weapon w = f.createWeapon();
        w.shoot();
        Food a = f.createFood();
        a.printName();
    }
}

三种工厂模式的比较:

工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模式,把核心放在一个实类上。

工厂方法模式允许很多实的工厂类从抽象工厂类继承下来,从而可以在实际上成为多个简单工厂模式的综合,从而推广了简单工厂模式。

简单工厂模式是由工厂方法模式退化而来。

在抽象工厂方法模式中,抽象产品可能是一个或多个,从而构成一个或过个产品族。在只有一个产品族的情况下,抽象工厂模式退化为工厂方法模式。


四、适配器模式

是把一个类的接口转换成客户端所期望的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能一起工作。

分为类适配器模式的对象适配器模式。

类适配器模式:把适配的类的API转换为目标类的API。

对象适配器模式:与类适配器模式一样,对象适配器模式也是把适配的类的API转换为目标类的API。不同的是,对象的适配器模式不是使用继承关系连接到

目标类,而是使用委派关系连接到目标类。

具体参考:http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html

五、单例模式

参考:http://blog.csdn.net/jason0539/article/details/23297037

http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/

六、原型模式



设计模式参考:http://blog.csdn.net/jason0539/article/category/2093817















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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值