设计模式——HeadFirst

《Head First》设计模式

策略模式

封装可以互换的行为,并使用委托来决定要使用哪一个。

public interface FlyBehavior{
	void fly();
}
public FlyWithWings implements FlyBehavior{
	public void fly(){
		System.out.println("用翅膀飞");
	}
}
public FlyNoWay implements FlyBehavior{
	public void fly(){
		System.out.println("不会飞");
	}
}
public class Duck{
	FlyBehavior flyBehavior;
	public void performFly(){
		flyBehavior.fly();
	}
}
public class DuckA extends Duck{
	public DuckA(FlyBehavior flyBehavior){
		this.flyBehavior = flyBehavior;  
	}
}

观察者模式

让对象能够在状态改变时被通知。
出版者+订阅者=观察者模式

//出版者
public interface Subject{
	void registerObserver(Observer o);
    void removeObserver(Observer o);
	void notifyObserver();
}
//订阅者
public interface Observer{
	void notify();
}
public A implements Subject{
	private ArrayList<Observer> observers;
	public void registerObserver(Observer o){
		observers.add(o);
	}
	public void removeObserver(Observer o){
		int i = observers.indexOf(o);
		if(i>=0){
			observers.remove(i);
		}
	}
	public void notifyObserver(){
		observers.forEach(each->each.notify())
	}
}

装饰模式

包装一个对象,以提供新的行为。

public interface A{
	String getDescription();
	double cost();
}
public class B implements A{
	A a;
	public B(A a){
		this.a = a;
	}
	public String getDescription(){
		return a.getDescription() + "b的描述";
	}
	public double cost(){
	 	return a.cost() + 5;
	}
}

个人理解:装饰模式中被装饰对象和装饰对象都实现一样的接口或继承一样的抽象类,在装饰类中引用被装饰对象,实现装饰类方法时需要依靠被装饰对象的参与。

单件模式

确保有且只有一个对象被创建。构造方法声明为private,无法通过new实例化对象,只能通过类提供的静态方法获取实例变量。

public class Singleton{
	private static Singleton instance;
	private Singleton(){}
	public static Singleton getInstance(){
		if(instance==null){
			instance = new Singleton();
		}
		return instance;
	}
}

处理多线程时,把getInstance变成同步方法:

public class Singleton{
	private static Singleton instance;
	private Singleton(){}
	public static synchronized Singleton getInstance(){
		if(instance==null){
			instance = new Singleton();
		}
		return instance;
	}
}

或者,用另一种方式,“急切”创建实例,而不用延迟实例化的做法。

public class Singleton{
	private static Singleton instance = new Singleton();
	private Singleton(){}
	public static Singleton getInstance(){
		return instance;
	}
}

同步方法虽然可以确保只有一个实例,但是会增加时间损耗,用“双重检查加锁”,在getInstance中减少使用同步。

public class Singleton{
	private static Singleton instance;
	private Singleton(){}
	public static Singleton getInstance(){
	    if(instance==null){
			synchronized(Singleton.class){
				if(instance==null)
					instance=new Singleton();
			}
		}
		return instance;
	}
}

代理模式

包装对象,以控制对此对象的访问。

模板模式

由子类决定如何实现一个算法中的步骤。

外观模式

简化一群类的接口。

适配器模式

封装对象,并提供不同的接口。

命令模式

封装请求成为对象。

迭代器模式

在对象的集合中游走,而不暴露集合的实现。

组合模式

客户用一致的方式处理对象集合和单个对象。

状态模式

封装了基于状态的行为,并使用委托来决定要使用哪一个。

工厂方法

由子类决定要创建的具体类是哪一个。

抽象工厂

允许客户创建对象的家族,而无需指定他们的具体类。

时间问题,暂时分享上述设计模式,后续补全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Head First 设计模式(高清中文完整版带目录)+附书源码+HeadFirst设计模式学习伴侣.rar 又名: Head First Design Patterns 作者: (美)弗里曼(Freeman,E.) 副标题: Head First Design Patterns 简介 ······   你不想重新发明车轮(或者更差的是,没有充气车胎的轮子),所以你从设计模式中寻求帮助—— 设计模式是过去人们面对同样的软件设计问题所得到的经验。 有了设计模式,就可以利用其他人的实践经验的精华, 因此省下的时间可以用在其他的事情上,如:更有挑战性的事情、更复杂的事情以及更有趣的事情。你想要学习:    ·重要的模式 ;    ·何时使用某个模式,为何使用该模式;    ·如何在你自己的设计中马上采用这些模式;    ·何时不该使用该模式(如何避免滥用模式);    ·某个模式是依据哪些面向对象设计原理而设计出来的。    更重要的是,你想在学习设计模式的过程中,不感觉到昏昏欲睡。如果你曾经读过任何一本深入浅出(Head First)系列书籍, 你就会知道能够从本书中得到的是:透过丰富的视觉效果让你的大脑充分地运作。本书的编写运用许多最新的研究,包括神经生物学、认知科学以及学习理论, 这使得这本书能够将这些设计模式深深地烙印在你的脑海中,不容易被遗忘。你将会更擅长于解决软件设计中的问题, 并能够和你的团队成员用模式的语言来更好地沟通。 作者简介 ······   Eric Freeman以及Elisabeth Freeman是作家、教育家以及技术发明者。 他们在迪斯尼公司领导了四年的数字媒体以及因特网的开发,后来他们将这些经验应用在他们自己的媒体中, 包括这本书中。Eric具有耶鲁大学的计算机科学博士学位,Elisbeth具有耶鲁大学的计算机科学硕士学位。    Kathy Sierra(javaranch.com的创始者)以及Bert Bates是畅销的“深入浅出”(Head First)系列书籍的策划者, 也是Sun公司Java开发员认证考试的开发者。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值