java基础:
首先写一下单例模式吧 单例模式分两种一种懒汉模式,一种饿汉模式
饿汉模式
class Student{
private Student(){}
private static final Student s=new Student();
public static Student getInstance(){
return s;
}
}
懒汉模式
class Student{
private Studnet(){}
private static final Student=null;
public static Student getInstance(){
return s;
}
}
工厂模式 为什么要用工厂设计模式?工厂设计模式有什么好处?
先来说一下工厂模式有哪些 :1.简单工厂(静态方法工厂) 3.抽象工厂
然后说一下自己的理解和看的一些资料的总结
总结应用场景:当我起床不想做任何事情,而我现在需要刷牙,洗脸,洗头,刮胡子,想喝牛奶,吃包子这个时候要我自己动手要是有个工厂就好了,有个工厂就像有了个保姆一样你要什么就叫他准备,然后当你呼叫她的时候他什么都给你准备好了,你只要自己选择就可以。
优点:将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,明确了职责。
把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则,面向接口编程,而不是面向实现编程。
缺点:就是保姆如果生病了或者不能过来了,那你将找不到你的牙刷,剃须刀,洗发水,找不到毛巾,找不到牛奶店 哈哈那你将不能自理!
还有就是实际编码场景中表现的缺点:
- 要新增产品类的时候,就要修改工厂类的代码,违反了开放封闭原则(对扩展的开放,对修改的关闭)。
- 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。
逼逼了这么多还是上代码吧
public abstarct class DoingSomthing{
public abstarct void doing();
}
//拿毛巾
public class Yashua extends DoingSomthing{
@Override
public void doing(){
System.out.println("牙刷放这里了");
}
}
//拿毛巾
public class Maojin extends DoingSomthing{
@Override
public void doing(){
System.out.println("毛巾放这里了");
}
}
//拿剃须刀
public class Tixudao extends DoingSomthing{
@Override
public void doing(){
System.out.println("剃须刀放这里了");
}
}
//我需要的工厂/保姆
public class MyFactory{
private MyFactory(){}
public static Mydoing createMyFactory(String type){
if("yashua".equals(type)){
return new Yashua ();
}else if("maojin".equals(type)){
return new Maojin ();
}else if("tixudao".equals(type)){
return new Tixudao ();
}else{
return null;
}
}
}
//demo main
public class TestDemo{
public static void main(String[] agrs){
MyFactory mf=new MyFactory.createMyFactory("yashua");
mf.doing();
new MyFactory.createMyFactory("maojin");
mf.doing();
new MyFactory.createMyFactory("tixudao");
mf.doing();
// NullPointerException
mf=new MyFactory.createMyFactory("niunai");
if(mf!=null){
mf.doing();
}else{
System.out.println("工厂中没有!");
}
}
}