java基础学习之设计模式 十七
2017-03-21 23:09
459 查看
设计模式:
通过很多东西抽取出来的一个模型
设计模式分类:
创建型:创建对象,工厂模式,单例模式
结构型:对象间的关系,装饰模式
行为型:对象能够做什么,魔板模式
简单的工厂模式:
AnimalFactory
AnimalTest
工厂方法模式
AnimalTest
单例模式
饿汉式:
package single;
/**
* 单例模式
* @author Angus
* 在内存中只存在一个对象。。。
* 1:外界不能随意创建对象,私有构造方法
* 2;类本身创建一个对象
* 3:通过公共的方式给别人使用
*/
public class SingleDemo {
public static void main(String[] args) {
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
System.out.println(s1==s2); //true
s1.show();
s2.show();
}
}
/*
* 饿汉式
*/
class Student{
//私有构造方法 这样就无法new对象
private Student(){
}
//私有静态防止外部使用
private static Student s = new Student();
//公共方法使用
public static Student getStudent(){
return s;
}
public void show(){
System.out.println("show");
}
}
结果:
懒汉式:
package single;
/**
* 单例模式
* @author Angus
* 在内存中只存在一个对象。。。
* 1:外界不能随意创建对象,私有构造方法
* 2;类本身创建一个对象
* 3:通过公共的方式给别人使用
*/
public class SingleDemo {
public static void main(String[] args) {
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
System.out.println(s1==s2); //true
s1.show();
s2.show();
}
}
/*
* 懒汉式
* 延迟加载,
* 但是多线程会有安全问题,所以加锁
*/
class Student{
//私有构造方法 这样就无法new对象
private Student(){
}
//私有静态防止外部使用
private static Student s = null;
//公共方法使用
public synchronized static Student getStudent(){
if(s ==null){
s = new Student();
}
return s;
}
public void show(){
System.out.println("show");
}
}
其它模式就不多做笔记。。。重在理解。。。
至此java基础复习完毕。。。。
未来三个月到四个月内复习完j2EE所有内容。。
通过很多东西抽取出来的一个模型
设计模式分类:
创建型:创建对象,工厂模式,单例模式
结构型:对象间的关系,装饰模式
行为型:对象能够做什么,魔板模式
简单的工厂模式:
package fanctory; public abstract class Animal { public abstract void eat(); }
package fanctory; public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼。。。。"); } }
package fanctory; public class Dog extends Animal{ @Override public void eat() { System.out.println("狗吃骨头"); } }
AnimalFactory
package fanctory; public class AnimalFactory { private AnimalFactory() { // TODO Auto-generated constructor stub } public static Dog getDog(){ return new Dog(); } public static Cat getCat(){ return new Cat(); } public static Animal creatAnimal(String type){ if("dog".equals(type)){ return new Dog(); }else if("cat".equals(type)){ return new Cat(); }else{ return null; } } }
AnimalTest
package fanctory; /** * * @author Angus * 工厂模式 */ public class AnimalTest { public static void main(String[] args) { // Dog d = new Dog(); // d.eat(); //可以考虑别人来创建对象,既工厂创建。。。 Dog d = AnimalFactory.getDog(); d.eat(); Cat c = AnimalFactory.getCat(); c.eat(); //这样基本的工厂模式完成。。 //但是发现如果有新的动物需要添加,我们就要新建一个类,修改工厂类,添加功能 Animal a = AnimalFactory.creatAnimal("dog"); a.eat(); } }
工厂方法模式
package factory2; public abstract class AnimalFactory { public abstract Animal creatAnimal(); }
package factory2; public class DogFactory extends AnimalFactory{ @Override public Animal creatAnimal() { return new Dog(); } }
package factory2; public class CatFacttory extends AnimalFactory{ @Override public Animal creatAnimal() { // TODO Auto-generated method stub return new Cat(); } }
AnimalTest
package factory2; /** * * @author Angus * 工厂方法模式 * 这样没添加一个动物 只需要增加一个动物类和一个动物工厂类 不会修改代码。。 * java思想:扩展不修改。。 */ public class AnimalTest { public static void main(String[] args) { //狗 AnimalFactory af = new DogFactory(); Animal a = af.creatAnimal(); a.eat(); //猫 af = new CatFacttory(); a = af.creatAnimal(); a.eat(); } }
单例模式
饿汉式:
package single;
/**
* 单例模式
* @author Angus
* 在内存中只存在一个对象。。。
* 1:外界不能随意创建对象,私有构造方法
* 2;类本身创建一个对象
* 3:通过公共的方式给别人使用
*/
public class SingleDemo {
public static void main(String[] args) {
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
System.out.println(s1==s2); //true
s1.show();
s2.show();
}
}
/*
* 饿汉式
*/
class Student{
//私有构造方法 这样就无法new对象
private Student(){
}
//私有静态防止外部使用
private static Student s = new Student();
//公共方法使用
public static Student getStudent(){
return s;
}
public void show(){
System.out.println("show");
}
}
结果:
懒汉式:
package single;
/**
* 单例模式
* @author Angus
* 在内存中只存在一个对象。。。
* 1:外界不能随意创建对象,私有构造方法
* 2;类本身创建一个对象
* 3:通过公共的方式给别人使用
*/
public class SingleDemo {
public static void main(String[] args) {
Student s1 = Student.getStudent();
Student s2 = Student.getStudent();
System.out.println(s1==s2); //true
s1.show();
s2.show();
}
}
/*
* 懒汉式
* 延迟加载,
* 但是多线程会有安全问题,所以加锁
*/
class Student{
//私有构造方法 这样就无法new对象
private Student(){
}
//私有静态防止外部使用
private static Student s = null;
//公共方法使用
public synchronized static Student getStudent(){
if(s ==null){
s = new Student();
}
return s;
}
public void show(){
System.out.println("show");
}
}
其它模式就不多做笔记。。。重在理解。。。
至此java基础复习完毕。。。。
未来三个月到四个月内复习完j2EE所有内容。。
相关文章推荐
- 黑马程序员—java基础学习--单例设计模式
- 黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】
- Java基础学习笔记-设计模式
- 黑马程序员——学习Java基础之 io LineNumberReader 之装饰设计模式
- 【黑马程序员】Java基础学习博客——两种设计模式
- Java基础17:设计模式学习总结
- 【幻化万千戏红尘】qianfengDay07-java基础学习:static、设计模式之单例模式
- Java基础学习总结(84)——Java面向对象六大原则和设计模式
- java核心基础学习笔记-------设计模式之单例设计模式
- java基础学习—设计模式
- 《Java编程思想_ 深入理解java虚拟机_Thinking in java__Effiect java__设计模式》学习笔记7——泛型编程基础
- Java基础学习总结(8)——Java23种设计模式(Design Patterns)详解
- Java基础学习总结——Java23种设计模式(Design Patterns)详解
- 【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式
- Java基础学习总结(84)——Java面向对象六大原则和设计模式
- 黑马程序员 JAVA学习笔记——java基础 单例设计模式
- 黑马程序员_java基础学习笔记之单例设计模式
- java学习 第二章 设计模式基础
- JAVA设计模式学习之Flyweight模式(2)
- JAVA设计模式学习之Flyweight模式(1)