第一篇:設計模式之心得
剛學幾天就有一些淺薄的心得了。
在學過的幾種設計模式中(目前為止,本人只學過創建性模式),每一種設計模式都會有一種具體的應用場景,每一種場景描述的都是一種需求變化。設計模式就是用來解決這些變化的。
只要客戶有新的需求,你的程序就要發生改變,不管你用什么方法,這個改變是避免不了的。關鍵是你如何是解決這種變化!設計模式就是尋求一種通用的較好的方法來解決這種變化而不是避免這種變化,并不是你應用了設計模式,你的系統就不會發生變化了。
面向對象的編程有三大機制,我個人認為,設計模式很好的利用了其中的“封裝與多態”(當然并不是所有的設計模式都是這樣的,也不是說繼承就沒用,繼承在三大機制排第一呀,是基本的),比如工廠方法模式和生成器模式。“封裝”的意義不僅僅在于封裝代碼的實現,更重要的是“封裝”系統中變化的部分。設計模式回答了怎么樣去“封裝”這種變化。
在一個系統中,總會有一部分經常發生變化,相對的,也總有一個部分是改變頻率較低的,我們可以在某種范圍內將其理解為不改變的部分。設計模式要作的事情就是把“變化”的部分封裝起來,實現將“變化”的部分與“不變化”的部隔離,這樣,“變化”的部分在發生變化時,不會影響到“不改變”的部分。如果你也學過設計模式,那你可能跟我有同感。設計模式解決變化的途徑可以概括為兩步(純屬個人見解):一是轉移變化,二是轉化變化。
首先是“轉移變化”。
簡單的說就是把A部分的變化轉移到B部分,請B去變化,讓A不發生變化。在程序中就是將變化從調用者轉移到被調用者。比如,你有一個類scene,這個類用于顯現一種風格的游戲場景,調用程序實例化這個類并使用它。如果有一天,需求改變了,當前風格的游戲場景顏色太冷了,我需要改變當前場景的顏色。這個時候你要決定,要讓誰去發生變化?是讓客戶調用程序去改變scene類的顏色屬性呢,還是讓你的類scene發生變化?設計模式回答的是,請scene發生變化,調用者不發生變化。
為什么要這樣回答,因為這個時候,你的系統可能已經交付用戶了,如果讓調用者發生變化,那整個系統都要發生變化。(這里討論只是一個簡單的應用,實際情況中往往沒有這里簡單。如果實際情況是這么簡單的話,設計模式估計就沒有用處了。)
然后是“轉化變化”。
確定了要改動scene,那要怎么樣去改scene呢?直接改嗎?當然不行,如果是這樣改,那還不如讓調用者去設置scene的某個屬性呢,反正都要重新部署。那要怎么改?“擴展”,把這種“改變”轉化為“擴展”。你不是要另外一種
scene嗎?那我重新為你設計一個sence并生成.dll交付你,然后讓現有的程序去調用這個scene。當然,這時可能需要調用者稍微的發生一下變化,比如開始調用者是直接調用scene來呈現場景的,現在將其改為根據配置文件來決定要呈現那種scene。但是如果之前你已經考慮到這個問題了,那調用者是不需要發生任何變化的,因為調用者是根據配置來決定所呈現的場景,需求發生彎化,只需要改變配置文件(可能是一個XML),把調用者與新添的scene關聯即可,這樣一來,“改動”就變為“擴展”,其帶來的好處也是顯而易見的,這也就是所謂的“開閉”原則。
以上文字完全是本人理解,隨著不斷的學習,我想這么文章估計要被改好多次,這是一個學習的過程。理解錯了、寫錯了都不要緊,關鍵是你怎么樣去面對這種錯誤!是拒絕承認錯誤還是正視錯誤?這也是設計模式回答的問題。
第二篇:設計模式初學心得
以前沒有接觸過設計模式,那其實也是因為以前沒有真正經歷過面向對象的設計。這樣的情況在我經歷了本科畢業設計,并且遵循我們實驗室的一位師兄的建議看了《設計模式精解》([美]Alan Shalloway & James R.Trott 著,熊節 譯)后有了根本的改變,我開始意識到一個程序員和一個設計者的區別,我也開始意識到在同學眼中“編程很強”的我只是——至少現在只是一個程序員。
我做的本科畢設是基于Java-Swing設計一個類似繪圖程序的系統,最終我設計出來的程序,在別人看來很不錯。但是只有我自己知道,我的設計其實是糟糕了,最明顯的就是低內聚、緊耦合,那些代碼甚至連我都不愿意去維護。于是當我看到書中的一句話:“幾乎百分之百的軟件都不是由它最初的設計者去維護的??”,更讓我感到這次設計的失敗(就連它的設計者都不原意去維護)。
《設計模式精解》的出現可以說讓我眼前一亮,這也是第一本讓我想再讀一次的書(即使現在我還沒有讀完)。究竟什么是模式?書中的解釋是“模式是針對特定場景下的特定問題的可重復、可表達的解決方案”,除此之外模式還必須有三個要點:
1.可重復性。解決方案應該對應于外部的場景。
2.可傳授性。一個解決方案應該可以移植到問題的不同情況中(絕大多數模式的可傳授性都建立在“約束”和“效果”的基礎上)。
3.用來表示這個模式的名稱。
模式不限于面向對象,不限于設計階段,甚至不限于軟件開發領域。設計模式只是模式的一個子集。
在前言中作者說在他對現有的設計模式的指導原則及策略都非常清楚之后,這些原則幫助他決定開始過一種為人解惑的生活??雖然我第一次看到“為人解惑的生活”這個詞語,但是我立刻感到這也是我所向往的一種生活。
書中介紹了軟件開發過程中的三個不同視角:
1.概念視角。這個視角“展現了問題領域中的概念??一個概念模型可以在對實現軟件有很少或毫無注意的情況下畫出??”
2.規格視角。“只看軟件的接口,而不看實現”
3.實現視角。就是現在的我唯一使用的視角——置身于代碼之中。
看到這里我更加肯定了這本所講的是我從來沒有注意過的東西,但是我對這些東西應該非常感興趣,而我也深深地感慨:我為什么現在才看到這本書。
在書中作者回顧了它從前的一個設計,通過不斷修改得出的優秀設計,逐步展現出設計模式的強大威力。書中有句話很經典——如果你只有一把錘子,那你會發現所有的東西都像釘子。意思是說如果你只知道一種解決問題的辦法,那你只會想用這個方法解決所有問題。我覺得這很像現在的我,在面向對象的設計中我幾乎只會“類繼承”,結果是我的畢設——過高的繼承體系導致緊耦合、低內聚。
當我學到書中介紹的第一個設計模式:Facade模式,我立刻對這些設計模式產生了濃厚的興趣,我發現自己像一個“完美主義者”,在試圖追求結構完美的程序代碼(可讀性好、易于維護),而設計模式給我提供了這樣的可能,盡管我僅僅看到了它的一點點部分。設計模式就像一個漂亮的女孩,而且你知道她不僅外表很漂亮,也很有內涵,那你想做的事情還有什么呢?當然是盡快接近并了解她??
第三篇:JAVA設計模式之創建模式
設計模式之Builder
Builder模式定義: 將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示.Builder模式是一步一步創建一個復雜的對象,它允許用戶可以只通過指定復雜對象的類型和內容就可以構建它們.用戶不知道內部的具體構建細節.Builder模式是非常類似抽象工廠模式,細微的區別大概只有在反復使用中才能體會到.為何使用?
是為了將構建復雜對象的過程和它的部件解耦.注意: 是解耦過程和部件.因為一個復雜的對象,不但有很多大量組成部分,如汽車,有很多部件:車輪 方向盤 發動機還有各種小零件等等,部件很多,但遠不止這些,如何將這些部件裝配成一輛汽車,這個裝配過程也很復雜(需要很好的組裝技術),Builder模式就是為了將部件和組裝過程分開.如何使用?
首先假設一個復雜對象是由多個部件組成的,Builder模式是把復雜對象的創建和部件的創建分別開來,分別用Builder類和Director類來表示.首先,需要一個接口,它定義如何創建復雜對象的各個部件: public interface Builder {
//創建部件A 比如創建汽車車輪
void buildPartA();
//創建部件B 比如創建汽車方向盤
void buildPartB();
//創建部件C 比如創建汽車發動機
void buildPartC();
//返回最后組裝成品結果(返回最后裝配好的汽車)
//成品的組裝過程不在這里進行,而是轉移到下面的Director類中進行.//從而實現了解耦過程和部件
Product getResult();} 用Director構建最后的復雜對象,而在上面Builder接口中封裝的是如何創建一個個部件(復雜對象是由這些部件組成的),也就是說Director的內容是如何將部件最后組裝成成品: public class Director {
private Builder builder;
public Director(Builder builder){
this.builder = builder;} // 將部件partA partB partC最后組成復雜對象 //這里是將車輪 方向盤和發動機組裝成汽車的過程 public void construct(){
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
} } Builder的具體實現ConcreteBuilder: 通過具體完成接口Builder來構建或裝配產品的部件;定義并明確它所要創建的是什么具體東西;提供一個可以重新獲取產品的接口: public class ConcreteBuilder implements Builder {
Part partA, partB, partC;public void buildPartA(){
//這里是具體如何構建partA的代碼
};public void buildPartB(){
//這里是具體如何構建partB的代碼 };public void buildPartC(){
//這里是具體如何構建partB的代碼 };public Product getResult(){
//返回最后組裝成品結果 };} 復雜對象:產品Product: public interface Product { } 復雜對象的部件: public interface Part { }
我們看看如何調用Builder模式: ConcreteBuilder builder = new ConcreteBuilder();Director director = new Director(builder);
director.construct();Product product = builder.getResult();Builder模式的應用
在Java實際使用中,我們經常用到“池”(Pool)的概念,當資源提供者無法提供足夠的資源,并且這些資源需要被很多用戶反復共享時,就需要使用池.“池”實際是一段內存,當池中有一些復雜的資源的“斷肢”(比如數據庫的連接池,也許有時一個連接會中斷),如果循環再利用這些“斷肢”,將提高內存使用效率,提高池的性能.修改Builder模式中Director類使之能診斷“斷肢”斷在哪個部件上,再修復這個部件.設計模式之Factory
定義:提供創建對象的接口.為何使用?
工廠模式是我們最常用的模式了,著名的Jive論壇 ,就大量使用了工廠模式,工廠模式在Java程序系統可以說是隨處可見。
為什么工廠模式是如此常用?因為工廠模式就相當于創建實例對象的new,我們經常要根據類Class生成實例對象,如A a=new A()工廠模式也是用來創建實例對象的,所以以后new時就要多個心眼,是否可以考慮實用工廠模式,雖然這樣做,可能多做一些工作,但會給你系統帶來更大的可擴展性和盡量少的修改量。我們以類Sample為例,如果我們要創建Sample的實例對象: Sample sample=new Sample();可是,實際情況是,通常我們都要在創建sample實例時做點初始化的工作,比如賦值 查詢數據庫等。
首先,我們想到的是,可以使用Sample的構造函數,這樣生成實例就寫成: Sample sample=new Sample(參數);但是,如果創建sample實例時所做的初始化工作不是象賦值這樣簡單的事,可能是很長一段代碼,如果也寫入構造函數中,那你的代碼很難看了(就需要Refactor重整)。為什么說代碼很難看,初學者可能沒有這種感覺,我們分析如下,初始化工作如果是很長一段代碼,說明要做的工作很多,將很多工作裝入一個方法中,相當于將很多雞蛋放在一個籃子里,是很危險的,這也是有背于Java面向對象的原則,面向對象的封裝(Encapsulation)和分派(Delegation)告訴我們,盡量將長的代碼分派“切割”成每段,將每段再“封裝”起來(減少段和段之間偶合聯系性),這樣,就會將風險分散,以后如果需要修改,只要更改每段,不會再發生牽一動百的事情。
在本例中,首先,我們需要將創建實例的工作與使用實例的工作分開, 也就是說,讓創建實例所需要的大量初始化工作從Sample的構造函數中分離出去。
這時我們就需要Factory工廠模式來生成對象了,不能再用上面簡單new Sample(參數)。還有,如果Sample有個繼承如MySample, 按照面向接口編程,我們需要將Sample抽象成一個接口.現在Sample是接口,有兩個子類MySample 和HisSample.我們要實例化他們時,如下: Sample mysample=new MySample();Sample hissample=new HisSample();隨著項目的深入,Sample可能還會“生出很多兒子出來”, 那么我們要對這些兒子一個個實例化,更糟糕的是,可能還要對以前的代碼進行修改:加入后來生出兒子的實例.這在傳統程序中是無法避免的.但如果你一開始就有意識使用了工廠模式,這些麻煩就沒有了.工廠方法
你會建立一個專門生產Sample實例的工廠: public class Factory{
public static Sample creator(int which){
//getClass 產生Sample 一般可使用動態類裝載裝入類。if(which==1)
return new SampleA();else if(which==2)
return new SampleB();
} } 那么在你的程序中,如果要實例化Sample時.就使用 Sample sampleA=Factory.creator(1);這樣,在整個就不涉及到Sample的具體子類,達到封裝效果,也就減少錯誤修改的機會,這個原理可以用很通俗的話來比喻:就是具體事情做得越多,越容易范錯誤.這每個做過具體工作的人都深有體會,相反,官做得越高,說出的話越抽象越籠統,范錯誤可能性就越少.好象我們從編程序中也能悟出人生道理?呵呵.使用工廠方法 要注意幾個角色,首先你要定義產品接口,如上面的Sample,產品接口下有Sample接口的實現類,如SampleA,其次要有一個factory類,用來生成產品Sample,如下圖,最右邊是生產的對象Sample:
進一步稍微復雜一點,就是在工廠類上進行拓展,工廠類也有繼承它的實現類concreteFactory了。抽象工廠
工廠模式中有: 工廠方法(Factory Method)抽象工廠(Abstract Factory).這兩個模式區別在于需要創建對象的復雜程度上。如果我們創建對象的方法變得復雜了,如上面工廠方法中是創建一個對象Sample,如果我們還有新的產品接口Sample2.這里假設:Sample有兩個concrete類SampleA和SamleB,而Sample2也有兩個concrete類Sample2A和SampleB2 那么,我們就將上例中Factory變成抽象類,將共同部分封裝在抽象類中,不同部分使用子類實現,下面就是將上例中的Factory拓展成抽象工廠: public abstract class Factory{
public abstract Sample creator();
public abstract Sample2 creator(String name);} public class SimpleFactory extends Factory{
public Sample creator(){
.........return new SampleA } public Sample2 creator(String name){
.........return new Sample2A } } public class BombFactory extends Factory{
public Sample creator(){
......return new SampleB } public Sample2 creator(String name){
......return new Sample2B } }
從上面看到兩個工廠各自生產出一套Sample和Sample2,也許你會疑問,為什么我不可以使用兩個工廠方法來分別生產Sample和Sample2? 抽象工廠還有另外一個關鍵要點,是因為 SimpleFactory內,生產Sample和生產Sample2的方法之間有一定聯系,所以才要將這兩個方法捆綁在一個類中,這個工廠類有其本身特征,也許制造過程是統一的,比如:制造工藝比較簡單,所以名稱叫SimpleFactory。在實際應用中,工廠方法用得比較多一些,而且是和動態類裝入器組合在一起應用,舉例
我們以Jive的ForumFactory為例,這個例子在前面的Singleton模式中我們討論過,現在再討論其工廠模式: public abstract class ForumFactory {
private static Object initLock = new Object();
private static String className = “com.jivesoftware.forum.database.DbForumFactory”;
private static ForumFactory factory = null;
public static ForumFactory getInstance(Authorization authorization){
//If no valid authorization passed in, return null.if(authorization == null){
return null;
}
//以下使用了Singleton 單態模式
if(factory == null){
synchronized(initLock){
if(factory == null){
......}
}
} try {
//動態轉載類
Class c = Class.forName(className);
factory =(ForumFactory)c.newInstance();} catch(Exception e){
return null;}
//Now, 返回 proxy.用來限制授權對forum的訪問
return new ForumFactoryProxy(authorization, factory,factory.getPermissions(authorization));
}
//真正創建forum的方法由繼承forumfactory的子類去完成.public abstract Forum createForum(String name, String description)
throws UnauthorizedException, ForumAlreadyExistsException;
....}
因為現在的Jive是通過數據庫系統存放論壇帖子等內容數據,如果希望更改為通過文件系統實現,這個工廠方法ForumFactory就提供了提供動態接口: private static String className = “com.jivesoftware.forum.database.DbForumFactory”;你可以使用自己開發的創建forum的方法代替com.jivesoftware.forum.database.DbForumFactory就可以.在上面的一段代碼中一共用了三種模式,除了工廠模式外,還有Singleton單態模式,以及proxy模式,proxy模式主要用來授權用戶對forum的訪問,因為訪問forum有兩種人:一個是注冊用戶 一個是游客guest,那么那么相應的權限就不一樣,而且這個權限是貫穿整個系統的,因此建立一個proxy,類似網關的概念,可以很好的達到這個效果.看看Java寵物店中的CatalogDAOFactory: public class CatalogDAOFactory {
/**
* 本方法制定一個特別的子類來實現DAO模式。
* 具體子類定義是在J2EE的部署描述器中。
*/
public static CatalogDAO getDAO()throws CatalogDAOSysException {
CatalogDAO catDao = null;
try {
InitialContext ic = new InitialContext();//動態裝入CATALOG_DAO_CLASS //可以定義自己的CATALOG_DAO_CLASS,從而在無需變更太多代碼 //的前提下,完成系統的巨大變更。
String className =(String)ic.lookup(JNDINames.CATALOG_DAO_CLASS);
catDao =(CatalogDAO)Class.forName(className).newInstance();
} catch(NamingException ne){
throw new CatalogDAOSysException(“
CatalogDAOFactory.getDAO: NamingException while
getting DAO type : n” + ne.getMessage());
} catch(Exception se){
throw new CatalogDAOSysException(“
CatalogDAOFactory.getDAO: Exception while getting
DAO type : n” + se.getMessage());
}
return catDao;
} } CatalogDAOFactory是典型的工廠方法,catDao是通過動態類裝入器className獲得CatalogDAOFactory具體實現子類,這個實現子類在Java寵物店是用來操作catalog數據庫,用戶可以根據數據庫的類型不同,定制自己的具體實現子類,將自己的子類名給與CATALOG_DAO_CLASS變量就可以。
由此可見,工廠方法確實為系統結構提供了非常靈活強大的動態擴展機制,只要我們更換一下具體的工廠方法,系統其他地方無需一點變換,就有可能將系統功能進行改頭換面的變化。
設計模式之Prototype(原型)
定義: 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象.Prototype模式允許一個對象再創建另外一個可定制的對象,根本無需知道任何如何創建的細節,工作原理是:通過將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象通過請求原型對象拷貝它們自己來實施創建。如何使用? 因為Java中的提供clone()方法來實現對象的克隆(具體了解clone()按這里),所以Prototype模式實現一下子變得很簡單.以勺子為例:
public abstract class AbstractSpoon implements Cloneable {
String spoonName;
public void setSpoonName(String spoonName){this.spoonName = spoonName;}
public String getSpoonName(){return this.spoonName;}
public Object clone()
{
Object object = null;
try {
object = super.clone();
} catch(CloneNotSupportedException exception){
System.err.println(“AbstractSpoon is not Cloneable”);
}
return object;
} } 有兩個具體實現(ConcretePrototype): public class SoupSpoon extends AbstractSpoon {
public SoupSpoon()
{
setSpoonName(“Soup Spoon”);
} } public class SaladSpoon extends AbstractSpoon {
public SaladSpoon()
{
setSpoonName(“Salad Spoon”);
} } 調用Prototype模式很簡單: AbstractSpoon spoon = new SoupSpoon();AbstractSpoon spoon = new SaladSpoon();當然也可以結合工廠模式來創建AbstractSpoon實例。
在Java中Prototype模式變成clone()方法的使用,由于Java的純潔的面向對象特性,使得在Java中使用設計模式變得很自然,兩者已經幾乎是渾然一體了。這反映在很多模式上,如Interator遍歷模式。
設計模式之Singleton(單態)
定義: Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。在很多操作中,比如建立目錄 數據庫連接都需要這樣的單線程操作。
還有, singleton能夠被狀態化;這樣,多個單態類在一起就可以作為一個狀態倉庫一樣向外提供服務,比如,你要論壇中的帖子計數器,每次瀏覽一次需要計數,單態類能否保持住這個計數,并且能synchronize的安全自動加1,如果你要把這個數字永久保存到數據庫,你可以在不修改單態接口的情況下方便的做到。
另外方面,Singleton也能夠被無狀態化。提供工具性質的功能,Singleton模式就為我們提供了這樣實現的可能。使用Singleton的好處還在于可以節省內存,因為它限制了實例的個數,有利于Java垃圾回收(garbage collection)。
我們常常看到工廠模式中類裝入器(class loader)中也用Singleton模式實現的,因為被裝入的類實際也屬于資源。如何使用?
一般Singleton模式通常有幾種形式: public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
}
第二種形式: public class Singleton {
private static Singleton instance = null;public static synchronized Singleton getInstance(){
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!if(instance==null)
instance=new Singleton();return instance;} //這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance(){
return instance;
} }
使用Singleton.getInstance()可以訪問單態類。
上面第二中形式是lazy initialization,也就是說第一次調用時初始Singleton,以后就不用再生成了。
注意到lazy initialization形式中的synchronized,這個synchronized很重要,如果沒有synchronized,那么使用getInstance()是有可能得到多個Singleton實例。關于lazy initialization的Singleton有很多涉及double-checked locking(DCL)的討論,有興趣者進一步研究。
一般認為第一種形式要更加安全些。使用Singleton注意事項:
有時在某些情況下,使用Singleton并不能達到Singleton的目的,如有多個Singleton對象同時被不同的類裝入器裝載;在EJB這樣的分布式系統中使用也要注意這種情況,因為EJB是跨服務器,跨JVM的。
我們以SUN公司的寵物店源碼(Pet Store 1.3.1)的ServiceLocator為例稍微分析一下:
在Pet Store中ServiceLocator有兩種,一個是EJB目錄下;一個是WEB目錄下,我們檢查這兩個ServiceLocator會發現內容差不多,都是提供EJB的查詢定位服務,可是為什么要分開呢?仔細研究對這兩種ServiceLocator才發現區別:在WEB中的ServiceLocator的采取Singleton模式,ServiceLocator屬于資源定位,理所當然應該使用Singleton模式。但是在EJB中,Singleton模式已經失去作用,所以ServiceLocator才分成兩種,一種面向WEB服務的,一種是面向EJB服務的。
Singleton模式看起來簡單,使用方法也很方便,但是真正用好,是非常不容易,需要對Java的類 線程 內存等概念有相當的了解。進一步深入可參考:
Double-checked locking and the Singleton pattern When is a singleton not a singleton?
第四篇:英語教學模式心得
英語教學模式心得
我校“以學導教,三精兩清”的教學模式,三年的探索與總結,幾近成熟,結合我們進行了三年課堂教學改革的課題,針對我校實際,英語組老師提出了“預習新知、展示交流、知識點撥、堂清反饋”創新模式。課改對學生的自信心也有了一定的提高,班級課堂活動參與率大大提升。許多之前不敢發言的同學在小組活動中,也能大膽的參與到課堂討論學習中來,學生的學習興趣和積極性得到了充分的提高。我們通過實踐論證,一致認為:好的教學模式可以充分調動學生學習的積極性、充分發揮學生學習的自主性、探究性,有機地讓學生的創造性思維在綜合探究的學習過程中得到充分的展示,實踐后和同行們進行了反復論證,并進行反思和總結。經過一段時間的實踐,收到良好的教學效果。
我作為一名一線教師開始在教學中摸索嘗試、使自己能進一步把理念和實踐合二為一,下面就把我一些體會和方法和大家一起探討一下。
(一)成功之處:
1、讓課改悄悄走進學生的課堂,從而潛移默化地改變學生學習的方式。
首先,自從課題改革實施以來,我們改變了以往課堂上一成不變的教學模式,通過各種形式的教學環節改革,極大地調動了學生學習的積極性與主動性,激發了學生學習英語的自主性和興趣。
當我們把“預習新知、展示交流、知識點撥、堂清反饋”這些任務交給學生來完成時,沒想到收到了許多意想不到的驚喜。例如,以前的課前檢查都是由老師親自檢查學生作業、練習的完成情況,于是有個別學生就會抄襲別人的作業,以應付檢查。而現在我們在課前安排了“自主學習”這一環節,由小組長檢查并幫助組內的“學困生”完成基礎練習,這樣以來,基本上能夠杜絕抄襲,“學困生”在組長的幫助下主動完成不會的部分,并搞懂了不會的原因,這比起以前的抄襲就要有效得多。
課前熱身時,采用每組抽一個學生上黑板展示單詞或句子,而其他同學在老師聽寫時,大聲站起來搶答的模式,對課前預習進行一個小小的匯報,并同時給予優勝者一顆紅星獎勵。通過這樣的“自主學習展示”,也使得學生的學習完全是自愿的和積極主動的,而且具有強烈的自主學習的愿望,而且還養成了良好的課前預習的好習慣。學生的學習也就不再是被動的而是變得較為主動,可以盡情的展示他們自學的收獲。往往是學生主動要求老師早上課,盡快檢查他們準備好的表演和展示。而教師也可以通過學生的展示較為充分地了解學生的預習情況,并有針對性的進行預設,很好的使用教材。
其次是更多的關注了學生學習過程的情感態度價值觀———停下來傾聽學生的心聲。在講完了某一知識點后可以用更多的時間來讓學生展示自己對學習內容的理解。如:展示交流、知識點撥等。通過學生的匯報,給他們提供了自我表達的空間與交流的平臺,樹立了他們學習英語的自信心,同時也檢測了同學們對知識掌握的深與淺,便于及時調控課堂,及時關注學生學習的情況。“堂清反饋”則是學生對知識的整合,是對自己學習的檢驗、總結。他們的暢所欲言讓學生有了充分展示自我的機會,給他們帶來了學習的希望,讓他們感受到了學習的快樂。
2.、課改走進了學生的課堂,也轉變了教師的教學理念,使我們不斷地改進了教學方法,激活了學生的自主思維,一切皆源于學生自愿的學習與努力。
首先,預習新知打破了以往循規蹈矩的聽寫與檢查,它給學生以自由表達的愿望,通過學生自我小結式的匯報,激發了他們自主學習的愿望。教學時,教師設置課前任務:明確學習目標、生成本課題的重點、難點并初步達成學習目標。其基本過程是:學生根據自學后對課本內容的把握,教師根據對課程標準的把握,通過師生共同討論,預設學習目標。然后,學生在通過自學、生生互動、師生互動等形式初步達成預設的目標,并對自己找出的重點、難點問題進行深入的探究,并在此基礎上不斷生成新的學習目標,為展示課做準備。學生提前搜集資料,整理資料,形成文字材料,上課時讓學生展示勞動成果。通過設計任務,有助于學生擴寬英語視野,提升信息的判斷能力和信息的運用能力。同時,課前準備由人物入手,有利于激發學生的學習熱情和興趣,對理解教材內容也很有幫助。如:對某個單詞用法的認識,是通過他們的自主學習去完成的,他有了學習的愿望,就有興趣去記憶它,分析它,辨別它。這樣通過自己的認知再將自己的所獲展示出來就有一種驕傲感和自豪感。諸如對短語的理解也是一樣,對課文的朗讀以及應用都是通過自愿的方式來完成學習的任務,所以說我們更多的是關注了學生的情感和態度。其次,利用情景教學模式,積極營造學生學習的英語情景,圍繞教學目標,譴用詞匯、圖片、聲音、動畫、視頻等不同形態的信息對所授教學內容和意境進行生動的再現,拓展學生視野。
通過精心編寫 “情境營造” 和一個個由淺入深、力度大的問題設計,充分調動了學生的學習情緒,強化了學生不斷進行探究的內在動機,讓學生自主探索解決問題的方法與步驟,并建構知識體系。在學生展示后,針對每位學生的表現,作適當的點評;在學生探究問題過程中,及時給予相應的引導和啟發,尤其是加強對學習方法的指導。
我校的堂清環節教師能從學情出發,從教育教學的規律出發,使教學內容、方法等符合學生的認知規律和特點,我覺的很好,但在實施一段時間中我發現堂清練習優秀生吃不飽后進生堂清不了,我計劃今后在堂清環節中進行分層練習,在當堂訓練環節中設置必做題、選做題、思考題3類題型。尖子生不僅要完成必做題,還必須完成選做題,最好能做思考題。這樣讓不同層次的學生都能在在課堂上全身心投入,積極地實踐,認真地思考,讓差的變好,讓好的更好;用“成功更是成功之母”的思想來教育學生,從而讓每位學生在自學、互助中發展,達到培優補差的目的。
(二)需要改進之處:
1、注意選擇整合各種資料,恰當地加以實際運用。
通過教改我們發現,必須對教材和一些有用的信息進行進一步的整合,才能有效的加以利用,以方便實際操作運用。
2、注意課堂教學的調控,靈活把握課堂教學的進程。
在教學的實際過程中,有時因預設不足,可能會導致教學任務不能按計劃完成,那么在運用時就應該酌情將教學內容中的一些訓練型問題典型化,將其他的題目留待輔導課時再做處理,不要一味貪多,反而不能達到預期的教學目標。
3、加強對學生情感、態度、價值觀的拓展和滲透。盡管素質教育一直是我們追求的教育目標,但在教改中,我個人認為更應該注重學生的情感、態度、價值觀的拓展和滲透。在新的教育理念當中,首先應該做做人的教育,其次才是做事以及學習的教育。這一點至關重要。
4、充分發揮學生自身作用,使其認識自己和英語課堂的密切關系。總之,經過近一年來有計劃、有目的的教學研究,我們對英語課堂的教學模式已經有了一定的認識,從中學到了不少行之有效的教學經驗。當然,一切的革新都是建立在不斷的學習和反思的基礎上的,只有不斷的反思并總結經驗、改進不足,才能在有限的課堂教學時間內獲取最大的教學效果,真正實現有效教學。
第五篇:學習小學英語教學設計之心得
學習小學英語教學設計之心得
小學英語課堂活動的設計就是英語教師根據正確的教學思想和英語教育原理,按照一定的教學思想和英語教育原理,按照一定的教學目的和要求,針對具體的教學對象和教材,對英語教學的整個程序、具體環節及有關曾面所作出的預期的行之有效的策劃和設計。在學習《小學英語教學活動設計》這門課程時,自己做了很詳細的筆記,特別是專家布置的作業,自己也是思考了很久才提交的,“功夫不負有心人”,花了近一個月時間完成的作業取得了理想的成績,獲得了“優秀”的等級。雖說在完成作業時確實花了不少時間和心思,但是在這個過程中自己也得到了很大的收獲。
英語教學不僅是一門學科,也是一門藝術,形成英語教學藝術特色的重要因素之一就是教學設計(instructional planning)。古人說:“凡事預則立,不預則廢。”強調無論做什么事都要預先謀劃,事前設計。現代教學尤其注重設計,科學的教學設計,既是體現教育目的性、計劃性、針對性和預習性所必需,又是順利實施教學方案、調控教學過程的前提,也是確保教學效果、提高教學質量的保證。
英語教學設計就是英語教師根據正確的教學思想和英語教育原理,按照一定的教學目的和要求,針對具體的教學對象和教材,對英語教學的整個程序及其具體環節、總體結構及其有關層面所作出的預期的行之有效的策劃。它是英語教師教育思想、思維流程和教學藝術的體現。眾多的教學實踐告訴我們,在學校教學條件有限的情況下,只要教師有心,同樣可以進行樸素卻生動的有效的教學設計;一個教師的基本功的精湛同樣是成就教學精彩的基本元素,如清爽明了的簡筆畫和教師動聽的歌喉也能使教學充滿詩意,吸引孩子們的眼球并提升語言能力。
新課程的課堂是具體的,動態生成的,它不是教師完全預設的。所以,我們教師在進行小學英語教學設計時,應認真思考以下幾個層面的問題:
觀念層面:是否充分領會現代教育理念和現代教育技術的核心要素。內容層面:教學設計是否有明確的問題情景和學習路徑。操作層面:是否將學習空間最大限度的留給學生。
綜上所述,以“學生”為主體的教學設計應充分重視學習者的自主學習,教師在設計教學預案時,要學會主動把自己當成“魚”,只有這樣學會了“換位思考”,能夠預想“魚”的各種感受,才會在觀念上和方法上得到自我提升,也才會真正創造出適合學生發展的教育活動。
在實際教學中,以下幾點英語教學設計的技巧,或許對我們的教學有幫助,可以提高教學效率。
一、因材設計
所謂因材設計,就是能根據教材內容來設計教學環節,確立教學的重難點。在具體的教學過程中要始終圍繞這個重點來安排教學活動,讓活動的每一個環節既精彩又有實效。
二、因人設計
由于學生之間具有明顯的差異性,底子不一,接受能力也不同。在設計教學活動時,教師必須潛心研究各個學生,設計出多層次的教學活動,讓全體學生都能在原有的基礎上學有所得、各展其長。
我覺得,在作業設計方面尤其應該考慮學生的實際,讓作業適合不同層次學生的學習能力。第一層,設計面向成績較差學生的基礎題;第二層,設計面向全體學生的鞏固題;第三層,設計面向“尖子生”的創新題。
三、因難設計
小學生學習英語最怕“難學”,而教師最擔心“難教”。在“難”字解決之后,教學中的其他問題馬上會迎刃而解。因此,在英語教學設計中,難點的處理尤為重要。處理得當,有事半功倍之效.以上簡短的語言其實不足以全面概括教學設計的方方面面,要做到教學設計的科學,全面,還需要我們去多多的親身實踐