说实在的我能念出名字的模式,也就一两个,一般面试的时候会问你知道几个设计模式,能不能写一个模式
所以我现在复习下。。。都半夜3点了,,,有点抽最近。
工厂模式: 大致思路,多个子类实现接口,然后写一个工厂类,判定是哪一个子类,main中实例化工厂类,输入判定参数,用父类接口 获取某个子类,然后调用子类方法
//父类接口
public interface father {
void run(String type);
}
//子类接口1
public class childOne implements father {
public void run() {
System.out.println("one run");
}
@Override
public void run(String type) {
// TODO Auto-generated method stub
System.out.println("one run"+" 调用子类"+type);
}
}
//子类接口2
public class childTwo implements father {
public void run() {
System.out.println("two run");
}
@Override
public void run(String type) {
// TODO Auto-generated method stub
System.out.println("two run"+" 调用子类"+type);
}
}
//工厂类
public class factory {
father test(String type){
if(type.equals("one")){
return new childOne();
}else if(type.equals("two")){
return new childTwo();
}else{
System.out.println("只能输入两个值");
}
return null;
}
}
//主函数
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String type = br.readLine();
factory f = new factory();
father o = f.test(type);
o.run(type);
}
//单列模延迟加载
public class model {
//持有私有静态实例,防止被引用,
private static model instance = null;
//私有化构造方法,防止被实例化
private model(){};
//静态方法,创建实例
public static model getInstance(){
if(instance == null){
instance = new model();
}
return instance;
}
public Object readResolve(){
return instance;
}
}
//建造者模式
- public class Builder {
- private List<Sender> list = new ArrayList<Sender>();
- public void produceMailSender(int count){
- for(int i=0; i<count; i++){
- list.add(new MailSender());
- }
- }
- public void produceSmsSender(int count){
- for(int i=0; i<count; i++){
- list.add(new SmsSender());
- }
- }
- }
- public class Test {
- public static void main(String[] args) {
- Builder builder = new Builder();
- builder.produceMailSender(10);
- }
- }
从这点看出,建造者模式将很多功能集成到一个类里,这个类可以创造出比较复杂的东西。所以与工程模式的区别就是:工厂模式关注的是创建单个产品,而建造者模式则关注创建符合对象,多个部分。因此,是选择工厂模式还是建造者模式,依实际情况而定。