【设计模型】——HeadFirst模式之眼(一)

    这篇文章,是在软考过程中总结的:设计模式就考几点:定义接口或抽象类(前提需要我们了解该模式用的接口还是抽象类,考题中的图一般都画成抽象类,但代码可能是实现接口)、实现接口或抽象类的关键字、最后压轴的就是设计模式的核心——眼,也就是该设计模式的精华之处在代码中的体现。

    既然知道了它怎么出招,后面的事就容易了......所以总结了这篇文章,和大家一起共勉。

    参考文献:《Head First》+3年真题,语言:Java。内容:考频较高的设计模式(先拿常考的试水)。


1.原型模式:

定义:

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

类图:

【设计模型】——HeadFirst模式之眼(一)_第1张图片

眼:复制(clone( ))

关键代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;">class Resume implements Cloneable{    //对应类图ConcretePrototype
	...
	public Object Clone()
	{
		Resume obj=new Resume(this.work)//定义Clone();
		...
		return obj;
	}
}
class WorkResume{                     //客户端
	Static void Main(string[] args)
	{
		Resume a =new Resum("zhaohan");
		...
		Resume b=(Resume)a.Clone();//复制a的信息*******************眼********************************
	}
}
</span>

2.状态模式:

定义:

    允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

类图:

    【设计模型】——HeadFirst模式之眼(一)_第2张图片

眼:对象内部进行状态改变

关键代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;">class TissueMachine
{
	State soldOutState,noQuarterState,hasQuarterSate...;
	state=soldOutState;                //最初纸巾机为空
	int count =0;                      //纸巾数为零
	public TissueMachine(intnumbers)
	{
		............
	}
	public State getHasQuarterState()
	{
		return hasQuarterState;
	}
	public State getNoQuarterState()
	{
		return noQuarterState;
	}
	.
	.
	.
	.
}
class NoQuarterState implements State       //对应类图ConcreteState
{
	TissueMachine tissueMachine;
	public void insertQuarter()              //无钱状态投入硬币
	{
		tissueMachine.setState(tissueMachine.getHasQuarterState());//状态改变到有硬币的状态*****眼****
	}
}
</span>

3.组合模式

定义:

    允许你将对象组合成树型结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

类图:

【设计模型】——HeadFirst模式之眼(一)_第3张图片

眼:组合

关键代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;">class Menu extends MenuComponent
{
	private List<MenuCompent>menuComponents=new ArrayList<MenuComponent>();
	public Menu(string name)
	{
		this.name=name;
	}
	<span style="color:#ff0000;">public void add(MenuComponent menuComponent)
	{
		menuComponents.add(menuComponent)//*******************眼********************************
	}</span>
	public void print()
	{
		system.out.print("\n"+getName());
		system.out.print(","+".....");
		Iterator iterator=menuComponents.iterator();
		while(iterator.hasNext())
		{
			MenuComponent menuComponent=(MenuComponent)iterator.next();
			menuComponent.print();
		}
	}
}</span>

    关于模式的眼,这纯是我个人的理解,思考的不是很成熟,肯定会和你的想法有所出入,如若此,望不吝赐教,请多多留言。

    这篇文章主要是整理出了一套复习设计模式的一个思路,根据它的考点,有针对性的突破,并在过程中真正的有所收获,这是我所想达到的效果。

    





你可能感兴趣的:(【设计模型】——HeadFirst模式之眼(一))