编程本身并没有什么设计模式,只是在需求的驱动下,大家采用某一种方式去解决问题,后来总结经验发现某一种方式可以解决一类特定问题。
这些经验就形成了五花八门的设计模式。
此博文仅是跟人学习笔记与心得,特与各位分享,如有不足之处还望不吝指出。
需求:“自给自足的樵夫砍柴”
分析:对象:樵夫、工具。方法:砍柴。
没有涉及模式
抽象出人类接口
interface human
{
}
抽象出工具接口
public interface Tool {
}
樵夫处在自给自足时代,想要砍柴还要自己造把斧头(好在樵夫知道如何去造一把斧头【兼职铁匠的说】)
public class Woodcutter implements Human{
//既然是个人,总是要有个称呼的,比如“老王”之类的
private String name ;
public Woodcutter(String name)
{
this.name = name;
}
/**
* 至少能够告诉别人你叫啥
* @return 姓名
*/
public String getName() {
return name;
}
/**
* 祖传制作斧头方法
*
*/
private interface Axe extends Tool
{
void cut();
}
/**
* 樵夫的砍柴方法
*/
public void sCutWood()
{
//砍柴之前总要有把斧头,不去买智能自己造
Axe axe = new Axe() {
@Override
public void cut() {
System.out.println("Cut wood!");
}
};
axe.cut();
}
public static void main(String[] args)
{
Woodcutter w = new Woodcutter("老王");
System.out.println(w.getName());
w.sCutWood();
}
}
新需求:“老王发现隔壁铁匠铺的斧头比自己造的好使耐用,于是决定去买一把斧头砍柴”
分析:新增对象:铁匠铺,斧头
简单工厂类型
铁匠铺也算一个简单的工厂了,工厂自然是一个泛指,应该用泛型滴!
public interface Factory {
<E> E produce(Class<E> clazz);
}
老王家隔壁的铁匠铺也是经营着多种业务啊
public class Forge implements Factory {
@Override
public <E> E produce(Class<E> clazz) {
E e = null;
try {
e = clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e1) {
e1.printStackTrace();
}
return e;
}
}
需要额外一个类来描述斧头了
public class Axe implements Tool{
/**
* 斧头的功能
*/
public void method()
{
System.out.println("用斧头砍");
}
}
老王不再自己造斧头了
public class Woodcutter implements Human{
//既然是个人,总是要有个称呼的,比如“老王”之类的
private String name ;
public Woodcutter(String name)
{
this.name = name;
}
/**
* 至少能够告诉别人你叫啥
* @return 姓名
*/
public String getName() {
return name;
}
/**
* 樵夫的砍柴方法
*/
public void sCutWood()
{
//现在不想自己做,直接去铁匠铺买一把斧头
Factory f = new Forge();
//告诉铁匠想要买个砍树的工具,铁匠就造了一把斧头给他
Tool t = f.produce(Axe.class);
//然后樵夫就使用这个工具去砍柴了
t.method();
}
public static void main(String[] args)
{
Woodcutter w = new Woodcutter("老王");
System.out.println(w.getName());
w.sCutWood();
}
}
需求就这样催生了简单的工厂模式