一.开发模式
单例模式 工厂模式 MVC架构 dao开发模型 代理模式 观察者模式
1.单例模式
– 一个类只有一个对象,并且自动向整个系统提供这个对象
– 生产,获取唯一一个对象的方法
单例模式实现:
– 拥有一个私有构造器
– 提供一个自身静态私有的成员变量
– 提供一个公有的静态公有的方法
final关键字
final可以修饰的元素:
类:不能被继承
变量(属性和局部变量):不能被重新赋值 在声明时赋值,或在构造器中赋值,系统不会对final属性默认的赋初始值
方法:不能在子类中被覆盖,即不能修改
2.工厂模式
–批量生产有共同特点的一类对象
简单工厂(静态工厂) : 静态工厂的生产方法生产出了具有接口共性特点的不同产品
3.抽象类 extends
–抽象方法和具体方法的集合
–抽象方法有abstract修饰,没有方法体的方法,没有具体实现方法的代码,只有方法声明,没有方法实现的方法
单继承
抽象类的规则
注意:
抽象类不能被实例化;
其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;
抽象方法不能为static;
在下列情况下,一个类必须声明为抽象类:
当一个类的一个或多个方法是抽象方法时;
当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;
当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;
4.接口 implements
接口中只包含常量和抽象方法,而没有变量和方法的实现
接口对类来说是一套规范,是一套行为协议
接口不是一个类,不能实例化
接口是常量和抽象方法的集合
可以多重实现
注意:
接口不是一个类,没有构造器,不能被实例化
接口使用interface关键字来定义,而不是class
接口默认:
常量:public static final
抽象方法: public abstract
5.内部类
里面的类可以直接使用外部类的属性和方法
外部类使用里面的类的属性方法时,需要实例化里面的类
单例模式
1 package singleton; 2 3 public class A { 4 5 } 6
1 package singleton; 2 3 public class Sin { // 单例类 4 5 /*特点: 6 某个类只能有一个实例 7 它必须自行创建这个示例 8 必须自行向整个系统提供这个实例*/ 9 10 int x=10; 11 12 private static final Sin s1=new Sin(); 13 14 15 private Sin(){} 16 17 //必须自行向整个系统提供这个实例 18 public static Sin getSin(){ 19 20 return s1; 21 } 22 23 public void abc(){} 24 25 26 27 }
1 package singleton; 2 3 public class Main9 { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 int x=10; 10 11 Sin s1=Sin.getSin(); 12 System.out.println(s1.x); 13 14 15 16 17 Sin s2=Sin.getSin(); 18 System.out.println(s2.x); 19 20 System.out.println(s1==s2); 21 22 A a1=new A(); 23 A a2=new A(); 24 System.out.println(a1==a2); 25 26 27 } 28 29 }
工厂模式
接口
1 package factory; 2 3 public interface Toy { //玩具接口---常量接口 4 5 //常量 6 String name="玩具"; 7 double price=10.0; 8 //抽象方法 9 public void show(); //单方法接口---最容易扩展需求 10 11 }
接口的实现类
1 package factory; 2 3 public class Car implements Toy { //玩具汽车 4 5 @Override //重写接口的方法 6 public void show() { 7 System.out.println(Toy.name); //直接使用接口名称调用常量 8 } 9 10 //玩具车新增的方法 11 public void run(String battcell){ //接收参数电池 12 System.out.println("玩具车需要有"+battcell+"才能向前跑"); 13 } 14 15 16 }
1 package factory; 2 3 public class Dull implements Toy { //玩偶 4 5 @Override 6 public void show() { 7 System.out.println(Toy.price); 8 } 9 10 }
1 package factory; 2 3 public class Brick implements Toy { //积木 4 5 @Override 6 public void show() { 7 8 } 9 10 }
工厂类
1 package factory; 2 /* 3 * 4 * == 判定相等 ---- 判定内存地址是否一致 (看是不是一个东西) 5 * equals 判定相等 ---- 判定值是否一致 (看是不是长的像) 6 * 7 * 8 */ 9 public class ToyFactory { // 工厂----生产玩具产品 10 11 // 生产---返回值为接口类型 12 public static Toy getToy(String material) { // 参数为原材料 13 14 if ( "金属".equals(material)|| material=="金属" ) { 15 return new Car(); // 匿名对象 16 } else if ("塑料".equals(material) || material=="塑料" ) { 17 return new Dull(); 18 } else if ("木材".equals(material)||material=="木材") { 19 return new Brick(); 20 } else { 21 System.out.println("您的材料有误"); 22 return null; 23 } 24 25 } 26 27 }
主方法
1 package factory; 2 3 public class Main12 { 4 5 /** 6 * 向上转型: 父类 ---- 子类构造方法 接口 ----- 实现类构造方法 7 * 8 * 向下转型: 子类----- (子类)父类构造方法 实现类 ------(实现类)返回接口类型 9 * 10 */ 11 public static void main(String[] args) { 12 // ToyFactory toyFactory=new ToyFactory(); 13 // System.out.println(toyFactory.getToy("塑料")); //直接输出对象,得到了对象的字符串表示 14 //Dull d1=(Dull)toyFactory.getToy("塑料"); 15 // d1.show(); 16 17 ((Dull)ToyFactory.getToy("塑料")).show(); //向下转型 18 ((Car)ToyFactory.getToy("金属")).show(); 19 20 } 21 22 }
抽象类
1 package abstract1; 2 3 public abstract class Abs { //抽象类 4 5 // 抽象 6 int x; 7 8 //抽象方法---没有具体实现方法的代码 9 public abstract void show(); 10 11 12 //具体方法(不推荐) 13 public void test(){ 14 System.out.println("Abs.test()"); 15 } 16 17 }
1 package abstract1; 2 3 public class AbsImp extends Abs { //完成具体功能 4 5 @Override //标注类型: 重写 6 public void show() { 7 8 System.out.println(1234567); 9 10 } 11 12 }
接口
1 package interface1; 2 3 public interface Animal { //动物接口 4 5 //常量 6 boolean sleep=true; 7 8 9 //抽象方法 10 public void eat(String x); 11 12 }
1 package interface1; 2 3 public class Horse implements Vehicle, Animal { //马 4 5 @Override 6 public void transport(String x) { 7 8 } 9 10 @Override 11 public void eat(String x) { 12 13 } 14 15 }
内部类
1 package test; 2 3 public class Outer { //类 4 int x=1; 5 public void show(){ 6 System.out.println("Outer.show()"); 7 Inter inter =new Inter(); 8 inter.test(); 9 } 10 11 public class Inter{ //内部类 12 public void test(){ 13 System.out.println(x); 14 } 15 } 16 }