单例模式
//懒汉式
class Singleton {
private Singleton() {}
private static Singleton instance;
public static Singleton getInstance() {
if(instance == null)
instance = new Singleton();
return instance
}
}
//饿汉式
class Singleton2 {
private Singleton() {}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
简单工厂模式(4个类+1个测试类)
又叫静态工厂方法模式,它定义了一个具体的工厂类负责创建类的一些实例。
**优点:**客户端不需要再负责对象的创建,从而明确了各个类的职责。
**缺点:**这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某个对象的创建方式不同,就需要不断地修改工厂类,不利于后期维护。
public class SimpleFactoryTest {
public static void main(String[] args) {
Dog dog = (Dog) AnimalFactory.createAnimal("dog");
Cat cat = (Cat) AnimalFactory.createAnimal("cat");
dog.eat();
cat.eat();
}
}
abstract class Animal {
public abstract void eat();
}
class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗啃骨头");
}
}
class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
class AnimalFactory {
public static Animal createAnimal(String animalName) {
if ("dog".equals(animalName))
return new Dog();
if ("cat".equals(animalName))
return new Cat();
return null;
}
}
工厂方法模式(6个类+1个测试类)
抽象工厂类定义所有工厂类的接口,具体创建对象由具体的 对象工厂创建
优点:客户端不需要负责对象创建,明确了各类的职责,如果有新的对象的增加,只需要创建一个对象工厂和对象就可以了
缺点: 需要额外的编写代码,增加了工作量。
public class FactoryMethodTest {
public static void main(String[] args) {
Factory factory = new DogFactory();
Animal animal = factory.createAnimal();
animal.eat();
}
}
interface Factory {
Animal createAnimal();
}
class DogFactory implements Factory {
@Override
public Dog createAnimal() {
return new Dog();
}
}
class CatFactory implements Factory {
@Override
public Cat createAnimal() {
return new Cat();
}
}
abstract class Animal {
public abstract void eat();
}
class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗啃骨头");
}
}
class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}